package com.tbit.uqbike.client.dao.log;

import com.tbit.uqbike.client.pojo.RefundMsg;
import com.tbit.uqbike.client.pojo.RefundOrder;

import java.util.List;

/**
 * 退款订单dao
 * @author Zhang Zhi Liang
 * @date 2024/3/28 15:57
 */
public interface RefundOrderDao {
    /**
     * 添加
     * @param refundOrder
     */
    void insert(RefundOrder refundOrder);

    /**
     * 更新退款订单状态
     * @param refundOrder
     */
    void update(RefundOrder refundOrder);

    /**
     * 更新退款订单回调相关状态
     * @param refundOrder
     */
    void updateCallBackInfo(RefundOrder refundOrder);

    /**
     * 更新退款订单消息消费相关状态
     * @param refundOrder
     */
    void updateMsgInfo(RefundOrder refundOrder);

    /**
     * 删除
     * @param refundNOs
     */
    void delete(List<String> refundNOs);

    /**
     * 根据退款对象id获取
     * @param refundNO
     * @return
     */
    RefundOrder getByRefundNO(String refundNO);

    /**
     * 定时任务清理临时表的SQL
     * 查找退款失败 和 退款成功且消息消费成功 的记录
     * @param intervals
     * @return
     */
    List<String> getReadyRefundOrderList(Integer intervals);

    /**
     * 定时任务补发MQ消息的SQL
     * 查找退款状态为完成 且 消息消费状态为失败 的记录
     * @param intervals
     * @return
     */
    List<RefundMsg> getNotSuccessMsg(Integer intervals);

    List<RefundOrder> getByBusinessNO(String businessNO);

    /**
     * 统计用户退款中状态的订单数量
     * @param userId
     * @return
     */
    int countPendingOrder(Integer userId);

    /**
     * 更新回调时间
     * @param refundNO 退款订单号
     */
    void updateCallbackTime(String refundNO);

    /**
     * @description: 查询同批次最后一次的汇付退款信息
     * @author wangweibin
     * @date 2025/5/19
     * @param refundBatch
     * @return List<RefundOrder>
     */
    RefundOrder getByRefundBatch(String refundBatch);
}
